// 引入存储功能
import { getToken, setToken, removeToken } from '@/utils/auth'
import { login, getUserInfo } from '@/api/user'

// 自定义vuex
const state = {
  token: getToken(), // 获取 token，初始值为存储中的 token
  userInfo: {} // 用户信息初始为空对象
}

const mutations = {
  setToken(state, token) { // 设置 token 的 mutation
    state.token = token // 更新 state 中的 token
    setToken(token) // 进行 token 存储
  },
  removeToken(state) { // 移除 token 的 mutation
    state.token = null // 将 state 中的 token 置为 null
    removeToken() // 移除存储中的 token
  },
  setUserInfo(state, userInfo) { // 设置用户信息的 mutation
    state.userInfo = userInfo // 更新 state 中的 userInfo
  }
}

const actions = {
  async login(context, data) { // 用户登录的异步 action
    const token = await login(data) // 调用登录接口获取 token
    context.commit('setToken', token.token) // 提交 setToken mutation，更新 token
  },
  async getUserInfo(context) { // 获取用户信息的异步 action
    const result = await getUserInfo() // 调用获取用户信息接口
    context.commit('setUserInfo', result) // 提交 setUserInfo mutation，更新用户信息
  },
  logout(context) { // 处理 token 失效退出的 action
    context.commit('removeToken') // 提交 removeToken mutation，移除 token
    context.commit('setUserInfo', {}) // 提交 setUserInfo mutation，设置用户信息为空对象
  }
}

// 进行导出
export default {
  namespaced: true, // 开启具名空间
  state,
  mutations,
  actions
}
